const api = require('../../utils/api.js')
const util = require('../../utils/util.js')
const config = require('../../utils/config.js')

Page({
    data: {
        form: {
            title: '',
            content: '',
            category: '',
            maxMembers: 10,
            location: '',
            latitude: null,
            longitude: null,
            startTime: '',
            endTime: '',
            tags: []
        },
        categories: config.categories.slice(1), // 去掉"全部"
        availableTags: config.tags,
        selectedTags: [],
        categoryIndex: 0,
        publishing: false
    },

    // 标题输入
    onTitleInput(e) {
        this.setData({
            'form.title': e.detail.value
        })
    },

    // 分类选择
    onCategoryChange(e) {
        const index = parseInt(e.detail.value)
        this.setData({
            categoryIndex: index,
            'form.category': this.data.categories[index].value
        })
    },

    // 选择位置
    async onChooseLocation() {
        try {
            const location = await util.chooseLocation()
            this.setData({
                'form.location': location.name || location.address,
                'form.latitude': location.latitude,
                'form.longitude': location.longitude
            })
        } catch (error) {
            console.error('选择位置失败:', error)
            // 如果用户取消选择，使用当前位置
            try {
                const currentLocation = await util.getLocation()
                this.setData({
                    'form.location': '当前位置',
                    'form.latitude': currentLocation.latitude,
                    'form.longitude': currentLocation.longitude
                })
            } catch (err) {
                util.showError('获取位置失败')
            }
        }
    },

    // 开始时间选择
    onStartTimeChange(e) {
        this.setData({
            'form.startTime': e.detail.value
        })
    },

    // 结束时间选择
    onEndTimeChange(e) {
        this.setData({
            'form.endTime': e.detail.value
        })
    },

    // 最大人数输入
    onMaxMembersInput(e) {
        const value = parseInt(e.detail.value) || 10
        this.setData({
            'form.maxMembers': Math.max(2, Math.min(value, 100)) // 限制2-100人
        })
    },

    // 标签选择
    onTagTap(e) {
        const tag = e.currentTarget.dataset.tag
        let selectedTags = [...this.data.selectedTags]

        if (selectedTags.includes(tag)) {
            selectedTags = selectedTags.filter(t => t !== tag)
        } else {
            if (selectedTags.length >= 5) {
                util.showError('最多选择5个标签')
                return
            }
            selectedTags.push(tag)
        }

        this.setData({
            selectedTags: selectedTags,
            'form.tags': selectedTags
        })
    },

    // 内容输入
    onContentInput(e) {
        this.setData({
            'form.content': e.detail.value
        })
    },

    // 发布活动
    async onPublish() {
        if (this.data.publishing) return

        // 表单验证
        if (!this.validateForm()) return

        this.setData({ publishing: true })
        util.showLoading('发布中...')

        try {
            // 准备数据 - 严格对应后端DTO格式
            const formData = {
                title: this.data.form.title.trim(),
                content: this.data.form.content.trim(),
                category: this.data.form.category,
                maxMembers: this.data.form.maxMembers,
                location: this.data.form.location,
                latitude: this.data.form.latitude,
                longitude: this.data.form.longitude,
                startTime: this.data.form.startTime + ':00', // 添加秒部分
                endTime: this.data.form.endTime + ':00',
                tags: this.data.form.tags
            }

            // 调用后端API
            const result = await api.post.createPost(formData)

            util.showSuccess('发布成功')

            // 返回首页并刷新
            setTimeout(() => {
                wx.navigateBack({
                    success: () => {
                        // 获取首页页面实例并刷新数据
                        const pages = getCurrentPages()
                        const indexPage = pages[pages.length - 2]
                        if (indexPage && indexPage.onPullDownRefresh) {
                            indexPage.onPullDownRefresh()
                        }
                    }
                })
            }, 1500)

        } catch (error) {
            console.error('发布失败:', error)
            util.showError('发布失败: ' + (error.message || '网络错误'))
        } finally {
            this.setData({ publishing: false })
            util.hideLoading()
        }
    },

    // 表单验证
    validateForm() {
        const form = this.data.form

        if (!form.title.trim()) {
            util.showError('请输入活动标题')
            return false
        }

        if (form.title.trim().length < 2) {
            util.showError('标题至少2个字符')
            return false
        }

        if (!form.category) {
            util.showError('请选择活动分类')
            return false
        }

        if (!form.location) {
            util.showError('请选择活动位置')
            return false
        }

        if (!form.startTime) {
            util.showError('请选择开始时间')
            return false
        }

        if (!form.endTime) {
            util.showError('请选择结束时间')
            return false
        }

        // 检查时间逻辑
        const startTime = new Date(form.startTime + ':00')
        const endTime = new Date(form.endTime + ':00')
        if (endTime <= startTime) {
            util.showError('结束时间必须晚于开始时间')
            return false
        }

        if (form.maxMembers < 2 || form.maxMembers > 100) {
            util.showError('参与人数必须在2-100之间')
            return false
        }

        if (!form.content.trim()) {
            util.showError('请输入活动描述')
            return false
        }

        if (form.content.trim().length < 10) {
            util.showError('描述至少10个字符')
            return false
        }

        return true
    }
})